<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // 定义了一个名字为Box的函数，是普通函数还是构造函数由具体如何使用决定。
    // 普通函数调用
    // function Box(){
    //     this.userName = "zhangsan";
    // }
    // Box();
    // console.log(window.userName);

    // 使用new 构造函数调用:
    // 1- 构造函数中隐式创建一个对象 const obj = {};
    // 2- 将obj的__proto__指向到Box下的prototype
    // 3- 将构造函数中的this指向到obj,执行构造函数   this=obj;
    // 4- 如果有return 返回是引用类型，返回的是引用类型数据，否则隐式返回obj;
    // function Box(){
    //     this.userName = "zhangsan";
    // }
    // var obj = new Box();
    // console.log(window.userName);// undefined
    // console.log(obj.userName);// zhangsan\

    // 若构造函数没有返回非原始值（即不是引用类型的值），则返回该新建的对象`obj`
    // （默认会添加`return this`）。否则，返回引用类型的值
    function Desk(){
        this.userName = "zhangsan";
        // return 1;
        // return "";
        // return {
        //     a:1
        // }
        // return []
        return function(){

        }
    }
    const obj = new Desk();
    console.log(obj);
</script>
</html>